# Q. What is this file?
# A. This file contains options which allow you to configure your multiworld experience while allowing
#    others to play how they want as well.
#
# Q. How do I use it?
# A. The options in this file are weighted. This means the higher number you assign to a value, the
#    more chances you have for that option to be chosen. For example, an option like this:
#
#    map_shuffle:
#      on: 5
#      off: 15
#
#    Means you have 5 chances for map shuffle to occur, and 15 chances for map shuffle to be turned
#    off.
#
# Q. I've never seen a file like this before. What characters am I allowed to use?
# A. This is a .yaml file. You are allowed to use most characters.
#    To test if your yaml is valid or not, you can use this website:
#        http://www.yamllint.com/
#    You can also verify that your Archipelago options are valid at this site:
#        https://archipelago.gg/check

# Your name in-game, limited to 16 characters.
#     {player} will be replaced with the player's slot number.
#     {PLAYER} will be replaced with the player's slot number, if that slot number is greater than 1.
#     {number} will be replaced with the counter value of the name.
#     {NUMBER} will be replaced with the counter value of the name, if the counter value is greater than 1.
name: Player{number}

# Used to describe your yaml. Useful if you have multiple files.
description: Default Johnny Upgrade Template

game: Johnny Upgrade
requires:
  version: 0.6.7 # Version of Archipelago required for this yaml to work as expected.

Johnny Upgrade:
  ################
  # Game Options #
  ################
  progression_balancing:
    # A system that can move progression earlier, to try and prevent the player from getting stuck and bored early.
    # 
    # A lower setting means more getting stuck. A higher setting means less getting stuck.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 0
    # Maximum value is 99
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-0-99: 0 # random value between 0 and 99
    disabled: 0 # equivalent to 0
    normal: 50 # equivalent to 50
    extreme: 0 # equivalent to 99

  accessibility:
    # Set rules for reachability of your items/locations.
    # 
    # **Full:** ensure everything can be reached and acquired.
    # 
    # **Minimal:** ensure what is needed to reach your goal can be acquired.
    full: 50
    minimal: 0

  coinsanity:
    # Adds a location check for every collectible coin on the map (246 checks).
    # 
    # ON: each coin is an Archipelago check and grants no local cash when collected. Cash comes
    # from received Coin Bundle items and passive income instead.
    # 
    # OFF: the coins are not checks, so they keep their normal vanilla payout and top up your cash
    # exactly as they always did (on top of Coin Bundles and passive income).
    'false': 0
    'true': 50

  enemysanity:
    # Adds a location check for destroying each killable hazard on the map (9 checks).
    # 
    # That is the 6 patrolling "robot" enemies plus the 3 floating bombs. The 2 saws are not
    # included because they cannot be destroyed at all -- killEnemy() only has branches for
    # e.robot, e.bomb and e.boss, so a saw simply absorbs the shot.
    # 
    # All 9 require shooting. A robot can only ever die to a bullet. A bomb can also be set off by
    # walking into it, but that does not count as the check -- destroying one with your body just
    # clears it for the rest of that round (it is back next run). Both send their check from
    # killEnemy(), which is only reached from the bullet collision loop.
    # 
    # Robots and bombs are NOT removed from the map once checked, unlike collected coins -- they are
    # hazards as well as checks, and deleting them would make the map progressively easier than the
    # one the logic was derived from.
    'false': 0
    'true': 50

  damage_boosts_in_logic:
    # Allow routes that require deliberately taking a hit to get past a hazard.
    # 
    # Taking damage grants 60 frames of invulnerability (killSprite sets sprt.inv = 60), which is
    # enough to run straight through an enemy that otherwise cannot be passed. One spot on the map
    # genuinely needs this: the floor robot under the low ceiling near the boss door has 200px of
    # clearance above it, and the player plus the robot need 210px, so it can neither be jumped nor
    # walked through.
    # 
    # Any route relying on this needs at least 2 hearts (1 Progressive Energy) so the hit is not
    # fatal. Turning this off removes every such route from logic; the solver confirms every
    # location also has a gun-based alternative (shoot the robot -- killRobot deletes it
    # permanently), so nothing becomes unreachable, but expect Progressive Ammo to become much more
    # load-bearing.
    'false': 0
    'true': 50

  recoil_boosts_in_logic:
    # Allow routes that use the laser gun's recoil as a movement tech.
    # 
    # shoot() sets your horizontal speed to 8 in the direction OPPOSITE your facing, replacing
    # whatever it was. Below about Speed 4 that is faster than you can run, so turning around and
    # firing is a genuine speed boost -- but it needs a frame-perfect turnaround, which is not
    # something to expect of a first-time player.
    # 
    # Off by default. The solver found this only opens ~40 shortcuts across the map, and every
    # location it touches is reachable without it, so enabling this simply gives the generator
    # cheaper alternatives rather than unlocking anything new.
    'false': 50
    'true': 0

  knockback_boosts_in_logic:
    # Allow routes that use damage knockback to launch across gaps (a BLJ-style trick).
    # 
    # killSprite sets your horizontal speed to 43.2 away from whatever hit you -- roughly four
    # times max run speed. Turning around on the hit so "away" points where you want to go throws
    # you across gaps that are otherwise out of reach. It is frame-perfect and quite advanced.
    # 
    # This is SEPARATE from Damage Boosts In Logic: that one is about tanking a hit for the
    # invulnerability frames to walk through an enemy, which stays available either way. This is
    # specifically about weaponising the knockback velocity for distance.
    # 
    # Off by default. It is by far the bigger of the two techs -- roughly 1,300 shortcuts across
    # 187 locations -- but again, nothing depends on it exclusively.
    'false': 50
    'true': 0

  passive_income_seconds:
    # Seconds of cumulative round playtime needed to earn one passive income tick.
    # 
    # This is a softlock backstop: since map coins are pure location checks now (no local cash),
    # a player who has spent everything and hasn't yet received a Coin Bundle item would otherwise
    # have no way to ever afford another shop purchase. Lower values grant cash faster.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 1
    # Maximum value is 10
    3: 50
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-1-10: 0 # random value between 1 and 10

  passive_income_amount:
    # Cash granted per passive income tick (see Passive Income Seconds Per Tick).
    # 
    # Higher values grant cash faster.
    #
    # You can define additional values between the minimum and maximum values.
    # Minimum value is 1
    # Maximum value is 10
    1: 50
    random: 0
    random-low: 0 # random value weighted towards lower values
    random-high: 0 # random value weighted towards higher values
    random-range-1-10: 0 # random value between 1 and 10

  ###########################
  # Item & Location Options #
  ###########################
  local_items:
    # Forces these items to be in their native world.
    []

  non_local_items:
    # Forces these items to be outside their native world.
    []

  start_inventory:
    # Start with the specified amount of these items. Example: "Bomb: 1"
    {}

  start_hints:
    # Start with these item's locations prefilled into the ``!hint`` command.
    []

  start_location_hints:
    # Start with these locations and their item prefilled into the ``!hint`` command.
    []

  exclude_locations:
    # Prevent these locations from having an important item.
    []

  priority_locations:
    # Prevent these locations from having an unimportant item.
    []

  item_links:
    # Share part of your item pool with other players.
    []

  plando_items:
    # Generic items plando.
    []
